﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace supervisor_de_cajas
{
    public partial class MenuCajero : Form
    {
        public MenuCajero()
        {
            InitializeComponent();
        }
        Gestion g = new Gestion();
        List<Producto> ListaProductos = new List<Producto>();
        public int ValorVenta;
        public void recargarForm()
        {
            lista.Items.Clear();
            txtcod.Text = "";
            txtefectivo.Text = "";
            txtcod.Enabled = true;
            txtcod.Focus();
            labelsubtotal.Text = "Subtotal :";
        }
        private void MenuCajero_Load(object sender, EventArgs e)
        {
            DateTime fechaHoy = DateTime.Now;
            //fecha.Text = fechaHoy.Date.ToString();
            labelsesion.Text = g.recuperarNombreSesionCajero(login.sesion) + " " + g.recuperarApellidoSesionCajero(login.sesion);
            columnHeader1.Width = 130;
            columnHeader2.Width = 150;
            columnHeader3.Width = 150;
        }
        Int64 cod;
        string nombre = "";
        string precio = "";
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar)  && !char.IsDigit(e.KeyChar)) { e.Handled = true; } else { e.Handled = false; }
            if (e.KeyChar == (char)13)
            {
                if (txtcod.Text == "")
                {
                }
                else
                {
                    cod = Convert.ToInt64(txtcod.Text);
                    

                    Gestion g = new Gestion();

                    nombre = g.recuperarNombreProducto(cod);
                    precio = g.recuperarPrecioProducto(cod);


                    if (precio == "")
                    {
                        MessageBox.Show("ARTICULO INEXISTENTE","INFO",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
                        txtcod.Text = "";
                        txtcod.Focus();
                    }
                    else
                    {
                        //lista.Items.Add(cod+"").SubItems.Add(nombre+"");
                        ListViewItem elemeneto = new ListViewItem();
                        elemeneto = lista.Items.Add(cod + "");
                        elemeneto.SubItems.Add(nombre);
                        elemeneto.SubItems.Add(precio);
                        Producto p = new Producto();
                        p._codigo = cod;
                        p._descripcion = nombre;
                        p._precio = int.Parse(precio);
                        p._cantidad = 1;
                        ListaProductos.Add(p);
                        txtcod.Text = "";


                    }



                }
                double A = 0;
                foreach (ListViewItem I in lista.Items)
                {
                    A += double.Parse(I.SubItems[2].Text);
                }
                labeltotal.Text= A.ToString();
                
            }
        }

        private void button31_Click(object sender, EventArgs e)
        {
            if (labeltotal.Text == "0")
            {
                MessageBox.Show("No hay productos en la lista", "INFO", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                int count = lista.Items.Count;
                //MessageBox.Show(count.ToString());
                ValorVenta = int.Parse(labeltotal.Text);
                double A = 0;
                foreach (ListViewItem I in lista.Items)
                {
                    A += double.Parse(I.SubItems[2].Text);
                }
                labeltotal.Text = A.ToString();
                labelsubtotal.Text = "Total :";
                labelefectivo.Visible = true;
                txtefectivo.Visible = true;
                // string dato = lista.SelectedItem;
                //MessageBox.Show(""+dato);
                txtcod.Enabled = false;
                txtefectivo.Focus();
            }
        }
        private void button33_Click(object sender, EventArgs e)
        {
            DialogResult boton = MessageBox.Show("¿Está seguro que desea cerrar su caja?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
            if (boton == DialogResult.Yes)
            {
                this.Close();
                login log = new login();
                log.Show();


            }
            else
            {
            }//boton cancelar
        }

        private void button30_Click(object sender, EventArgs e)
        {
            
            if (labelefectivo.Visible == false) { MessageBox.Show("Debe totalizar la venta.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); }
            else
            {
                if (txtefectivo.Text == "") { MessageBox.Show("Debe ingresar el efectivo u otro medio de pago.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); }
                else
                {
                    txtefectivo.Focus();
                    int total = Convert.ToInt32(labeltotal.Text);
                    int efectivo = Convert.ToInt32(txtefectivo.Text);
                    Int64 codigo = 0;
                    int nuevo = 0; 
                    if (labelefectivo.Visible == true)
                    {
                        if (efectivo < total)
                        {
                            int saldo = total - efectivo;
                            labelsubtotal.Text = "Saldo :";
                            labeltotal.Text = saldo.ToString();
                            txtefectivo.Text = "";

                        }
                        if (efectivo >= total)
                        {
                            int saldo = efectivo - total;
                            labelsubtotal.Text = "Vuelto :";
                            labeltotal.Text = saldo.ToString();
                            txtefectivo.Text = "";
                            txtefectivo.Visible = false;
                            labelefectivo.Visible = false;
                            messageboxTemporal.Show("Imprimiendo boleta...", "Procesando...", 5, false);
                            DateTime fechahoy = DateTime.Now;
                            int idturnocajero=g.RecuperarIdTurnoCajero(login.id,fechahoy.Date.ToString());
                            g.InsertarVenta(fechahoy.Date.ToString(),ValorVenta, int.Parse("2"),int.Parse("1"),idturnocajero);
                            
                            for (int i = 0; i < ListaProductos.Count; i++) { 
                             
                             Producto aux = (Producto)ListaProductos[i];
                             codigo = aux._codigo;
                            // MessageBox.Show(codigo.ToString());
                              nuevo = (g.RecuperarStock(codigo) - aux._cantidad);
                              
                              g.ActualizarStockProducto(codigo, nuevo);
                            }
                            
                            MessageBox.Show("Gracias por su compra.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            recargarForm();
                        }
                        if (labelsubtotal.Text == "Saldo :")
                        {
                            if (efectivo < total)
                            {
                               // MessageBox.Show("El monto debe ser mayor o igual al total.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            if (efectivo >= total)
                            {
                                int saldo = efectivo - total;
                                labelsubtotal.Text = "Vuelto :";
                                labeltotal.Text = saldo.ToString();
                                txtefectivo.Text = "";
                                txtefectivo.Visible = false;
                                labelefectivo.Visible=false;
                                messageboxTemporal.Show("Imprimiendo boleta...", "Procesando...", 5, false);
                                DateTime fechahoy = DateTime.Now;
                                int idturnocajero = g.RecuperarIdTurnoCajero(login.id, fechahoy.Date.ToString());
                                g.InsertarVenta(fechahoy.Date.ToString(), ValorVenta, int.Parse("2"), int.Parse("1"), idturnocajero);
                                for (int i = 0; i < ListaProductos.Count; i++)
                                {

                                    Producto aux = (Producto)ListaProductos[i];
                                    codigo = aux._codigo;
                                    // MessageBox.Show(codigo.ToString());
                                    nuevo = (g.RecuperarStock(codigo) - aux._cantidad);

                                    g.ActualizarStockProducto(codigo, nuevo);
                                }
                                MessageBox.Show("Gracias por su compra.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                recargarForm();
                            }
                        }
                        
                    }
                }
            }

        }

        private void button29_Click(object sender, EventArgs e)
        {
            txtcod.Enabled = true;
            labelefectivo.Visible = false;
            txtefectivo.Visible = false;
            labelsubtotal.Text="Subtotal :";
            txtcod.Focus();
        }

        private void button21_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button21.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button21.Text;
            }

        }

        private void button26_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button26.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button26.Text;
            }
        }

        private void button22_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button22.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button22.Text;
            }
        }

        private void button18_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button18.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button18.Text;
            }
        }

        private void button27_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button27.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button27.Text;
            }
        }

        private void button23_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button23.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button23.Text;
            }
        }

        private void button19_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button19.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button19.Text;
            }
        }

        private void button28_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button28.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button28.Text;
            }
        }

        private void button24_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button24.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button24.Text;
            }
        }

        private void button20_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                txtcod.Text += button20.Text;
            }
            if (txtefectivo.Focus() == true)
            {
                txtefectivo.Text += button20.Text;
            }
        }

        private void button17_Click(object sender, EventArgs e)
        {
            if (txtcod.Focus() == true)
            {
                if(txtcod.Text.Length > 0)
	          txtcod.Text = txtcod.Text.Substring(0, txtcod.Text.Length - 1);

            }
            if (txtefectivo.Focus() == true)
            {
                if (txtefectivo.Text.Length > 0)
                    txtefectivo.Text = txtefectivo.Text.Substring(0, txtefectivo.Text.Length - 1);

            }
        }

        private void button25_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem item in lista.SelectedItems)
                lista.Items.Remove(item);
            double A = 0;
            foreach (ListViewItem I in lista.Items)
            {
                A += double.Parse(I.SubItems[2].Text);
            }
            labeltotal.Text = A.ToString();
            
        }

        private void txtcodAnular_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsSeparator(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; } else { e.Handled = false; }
        }

        private void txtefectivo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; } else { e.Handled = false; }
        }

        private void button16_Click(object sender, EventArgs e)
        {
            if (labeltotal.Text == "0")
            {
                MessageBox.Show("Debe escanear un producto!", "Ayuda", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                ListViewItem elemeneto = new ListViewItem();
                elemeneto = lista.Items.Add(cod + "");
                elemeneto.SubItems.Add(nombre);
                elemeneto.SubItems.Add(precio);
                Producto p = new Producto();
                p._codigo = cod;
                p._descripcion = nombre;
                p._precio = int.Parse(precio);
                p._cantidad = 1;
                ListaProductos.Add(p);
                double A = 0;
                foreach (ListViewItem I in lista.Items)
                {
                    A += double.Parse(I.SubItems[2].Text);
                }
                labeltotal.Text = A.ToString();
            }
        }
    }
}
